package client

import (
    "context"
    "ez/grpc/{{ Name | lcfirst }}"
    "ez/vend/core"
    "ez/vend/tool"
    "google.golang.org/grpc"
    "google.golang.org/grpc/keepalive"
    "time"
)

var Rpc{{ Name }}Client {{ Name | lcfirst }}.{{ Name }}Client

//默认并没有启动，需要手动启动
//请勿直接在本文件内操作，下次更新会覆盖
func {{ Name }}ServerConnect() {
    port := core.GetConfig("RpcPort::{{ Name }}").String()
    con , err := grpc.Dial(
        port,
        grpc.WithInsecure(),
        grpc.WithKeepaliveParams(keepalive.ClientParameters{
        Time:                10 * time.Second,
        Timeout:             100 * time.Millisecond,
        PermitWithoutStream: false,
    }))
    ez.PrintError(err)
    Rpc{{ Name }}Client = {{ Name | lcfirst }}.New{{ Name }}Client(con)
}

//心跳接口，接收时间戳，原样返回
func RpcSendHeartBeat2{{ Name }}() {
    in := new({{ Name | lcfirst }}.HeartBeatIn)
    in.Now = time.Now().Unix()
    out, e := Rpc{{ Name }}Client.HeartBeat(context.TODO(), in)
    if !ez.PrintError(e) {
        if out.Now != in.Now {
            ez.PrintInfo("{{ Name }}HeartBeat 时间不匹配")
            //todo 实现警告提示
        } else {
            //todo 实现心跳保持，更新存活时间
        }
    }else {
        //todo 死掉的处理
    }
}

//注册一个广播服务的监听方，CTL接受到有效的事件时，通过调用本模块的grpc接口将消息转发过来
func RpcSendBroadcast2{{ Name }}(key string, content string) {
    in := new({{ Name | lcfirst }}.BroadcastListenIn)
    in.Key = key + "@{{ Name | lcfirst }}"
    in.Content = content
    out,e := Rpc{{ Name }}Client.BroadcastListen(context.TODO(), in)
    if !ez.PrintError(e) {
        ez.PrintInfo(out.Message)
    }else {
        //todo 死掉的处理
    }
}

//实现服务所能提供的接口，一般不建议使用Client下的原始方法
{% for item in Api %}
//{{ item.Describe }}
//Rpc{{ Name }}Client.{{ item.Name }}(context.TODO(), in {{ Name | lcfirst }}.{{ item.Name }}In)

{% endfor %}
{#{{ dump(Api) }}#}